/*
 * Copyright (c) 2010, Leon Dang f3it.com
 *           (c) 2010, Andrew Korolev redfox14 at gmail dot com
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   * Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 *   * Neither the name of the authors nor the names of its
 *     contributors may be used to endorse or promote products derived from
 *     this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#include <QtGui>
#include <QContactManager>
#include <QContactFilter>
#include <QContactDetailFilter>
#include <QContactName>
#include <QContactThumbnail>
#include <QContact>
#include <QContactDetail>
#include <QContactPhoneNumber>
#include <QIcon>

#include <QTime> // performance profiling

#include "userdetails.h"
#include "settings.h"
#include "dbrecord.h"

QTM_USE_NAMESPACE

UserDetails::UserDetails( const DBRecord * rec,
#if defined( Q_WS_MAEMO_5 ) || defined( Q_WS_HILDON )
						  Qt::WidgetAttribute screenOrientation,
#endif
						  QWidget * parent ): m_dbRecord( rec ), QDialog( parent )
{
	setAttribute( Qt::WA_DeleteOnClose );
#if defined( Q_WS_MAEMO_5 ) || defined( Q_WS_HILDON )
	setAttribute( screenOrientation, true );
#endif
	QPushButton * cb;
	QPushButton * sb;

	if ( m_dbRecord->name() != "" )
		setWindowTitle( m_dbRecord->name() );
	else if ( m_dbRecord->phoneNumber() != "" )
		setWindowTitle( m_dbRecord->phoneNumber() );
	else {
		setWindowTitle( tr( "Unknown Number" ) );
		return;
	}


	QVBoxLayout * mainLayout = new QVBoxLayout;

	const QContact * contact = m_dbRecord->contact();
	if ( contact == 0 )
	{
		cb = new QPushButton(QIcon(QString(IMG_CELL)), tr( "Phone %1" ).arg( m_dbRecord->phoneNumber() ) );
		sb = new QPushButton( QIcon( QString( IMG_SMS_READ ) ), tr( "&SMS %1" ).arg( m_dbRecord->phoneNumber() ) );
		QHBoxLayout * hLayout = new QHBoxLayout;
		hLayout->addWidget( cb );
		hLayout->addWidget( sb );
		mainLayout->addLayout( hLayout );
		setLayout( mainLayout );

		return;
	}

	thumb = new QFrame();
	thumb->setFrameShape( QFrame::StyledPanel );
	thumb->setFixedSize( 160,160 );

	QPixmap p = m_dbRecord->avatar().pixmap( 160, 160 );
	QPixmap scaled = p.scaled( QSize( 160, 160 ), Qt::KeepAspectRatio, Qt::SmoothTransformation );
	pix = new QLabel( thumb );
	pix->setPixmap( scaled );
	pix->setMask( scaled.mask() );
	pix->setMaximumSize( scaled.size() );

	QVBoxLayout * rightLayout = new QVBoxLayout;

	QHBoxLayout * hLayout = new QHBoxLayout;
	hLayout->addWidget( thumb );
	hLayout->addLayout( rightLayout );

	QList< QContactDetail > contactDetails = contact->details( QContactPhoneNumber::DefinitionName );
	for ( int i = 0; i < contactDetails.size(); i++ )
	{
		QContactPhoneNumber detail = contactDetails.at( i );
		//qDebug() << ">>>> NUMBER: " << detail.number();
		QStringList stl = detail.subTypes();
		//qDebug() << "STL " << stl.size();
		QString s;
		if ( stl.size() > 0 )
			s = stl.at( 0 );
		else
			s = QString( "Phone" );

		QHBoxLayout * hl = new QHBoxLayout;

		sb = NULL;
		QString style = "text-align: left;";

		// Highlight selected. Compare the last few digits as sometimes there is a comparison with
		// international calling code prefix.
		if ( m_dbRecord->phoneNumber().endsWith( detail.number().right( 8 ) ) )
			style.append( QString( "color: rgb(230,230,50);" ) );

		if ( s.compare( QString( "Mobile" ) ) == 0 )
		{
			cb = new QPushButton( QIcon( QString( IMG_CELL ) ), tr( "Mobile %1" ).arg( detail.number() ) );
			sb = new QPushButton( QIcon( QString( IMG_SMS_READ ) ), tr( "&SMS %1" ).arg( detail.number() ) );
		}
		else
		{
			cb = new QPushButton( QIcon( QString( IMG_CELL ) ), tr( "%1 %2" ).arg ( s ) .arg( detail.number() ) );
			sb = new QPushButton( QIcon( QString( IMG_SMS_READ ) ), tr( "&SMS %1" ).arg( detail.number() ) );
		}

		hl->addWidget( cb );
		if ( sb )
			hl->addWidget( sb );
		rightLayout->addLayout( hl );
	}

	/* -- TODO need to map dynamic buttons to these functions

	callButton = new QPushButton(tr("&Call"));
	callButton->setDefault(true);
	smsButton = new QPushButton(tr("&SMS"));
	closeButton = new QPushButton(tr("Close"));


	connect(callButton, SIGNAL(clicked()), this, SLOT(callUserClicked()));
	connect(smsButton, SIGNAL(clicked()), this, SLOT(smsUserClicked()));
	connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
	*/


	mainLayout->addLayout( hLayout );

	setLayout( mainLayout );
}

UserDetails::~UserDetails()
{
}

void UserDetails::callUserClicked()
{
}

void UserDetails::smsUserClicked()
{
}
